import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:Java语法练习
 * User: 86183
 */
public class Test1 {
/*输入一个整数，计算它的位数。如果输入的整数不大于0则输出这个数
输入描述：一个整数
输出描述：整数的位数*/
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt();
        if (num <= 0){
            System.out.println(num);
        }else {
            int count = 0;
            while (num != 0){
                count++;
                num /= 10;
            }
            System.out.println(count);
        }

    }
/*请补全预设代码中判断质数的方法。
输入描述：一个大于1的整数
输出描述：true/false*/
    public static void main16(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt();
        if (num == 2){
            System.out.println(true);
        }else {
            boolean flg = true;
            for (int i = 2; i < num; i++) {
                if (num % i == 0) {
                    System.out.println(false);
                    flg = false;
                    break;//结束整个循环
                }
            }
            if(flg == true) {//判断整个循环是否整个执行完，如果执行完，说明这个数是质数
                System.out.println(true);
            }
        }
    }
    public static void main15 (String[] args) {
        Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt();
        boolean result = isPrimeNumber(num);//调用方法
        System.out.println(result);
    }
    public static boolean isPrimeNumber(int n){
        if (n == 2){
            return true;
        }
        for (int i = 2; i < n; i++) {
            if(n % i == 0){
                return false;
            }
        }
        return true;
    }
/*键盘输入任意多个10000以内正整数（负数代表结束），求出它们的平均数，
输入描述：任意多个正整数
输出描述：它们的平均数（平均数为double类型，保留两位小数）*/
    public static void main14(String[] args) {
        Scanner scanner = new Scanner(System.in);
        boolean flg = true;
        int count = 0;
        double sum = 0;
        while (flg){
            int num = scanner.nextInt();
            if(num > 0){
                count++;
                sum += num;
                flg = true;
            }else {
                flg = false;
            }
        }
        double result = sum / count;//sum和count其中有一个数必须为double类型
        System.out.println(String.format("%.2f",result));
    }
/*一球从h米高度自由落下，每次落地后反弹回原高度的一半再落下，求它在第n次落地时共经过了多少米？第n次反弹多高？
输入描述：输入小球的初始高度和落地的次数（先输入小球初始高度再输入反弹次数）。
输出描述：输出小球反弹的高度和经过的距离（先输出反弹的高度再输出经过的距离，中间用空格隔开）。结果保留三位小数*/
    public static void main13(String[] args) {
        Scanner scanner = new Scanner(System.in);
        float height = scanner.nextFloat();
        int count = scanner.nextInt();
        float result = -height;
        for (int i = 0; i < count; i++) {
            result += height*2;//100 、200、250
            height /= 2;//50、25、12.5

        }
        System.out.println(String.format("%.3f",height)+" "+String.format("%.3f",result));
    }
/*编写一个方法，该方法的返回值是两个不大于100的正整数的最小公倍数
输入描述：两个int类型变量作为方法的参数
输出描述：int类型的变量，值为两个数的最小公倍数*/
    public static void main12(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int a = scanner.nextInt();
        int b = scanner.nextInt();
        int max = Math.max(a,b);
        for (int i = max; i <= a*b ; i++) {
            if(i % a == 0 && i % b == 0){
                System.out.println(i);
                break;
            }
        }
    }
    public static void main11(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int a = scanner.nextInt();
        int b = scanner.nextInt();
        int num = fun(a,b);
        System.out.println(num);

}
    public static int fun(int a,int b){
        int max = Math.max(a,b);
        for (int i = max; i <= a*b ; i++) {
            if(i % a == 0 && i % b == 0){
                return i;
            }
        }
        return -1;
    }
/*控制台输入整数，请设计一个死循环，当用户输入非正数时停止输入。请给出用户输入的正整数个数（默认输入个数不超过2147483647）
输入描述：若干整数，整数之间用空格隔开
输出描述：控制台输入的正整数个数*/
    public static void main10(String[] args) {
        Scanner scanner = new Scanner(System.in);
        boolean flg = true;
        int count = 0;
        while(flg){
            int num = scanner.nextInt();//定义的变量需要放到while循环中
            if (num > 0){
                count++;
                flg = true;//表示num是整数，继续循环
            }else {
                flg = false;
            }
        }
        System.out.println(count);
    }
/*有数列为：9，99，999，...，9999999999。要求使用程序计算此数列的和，并在控制台输出结果。*/
    public static void main9(String[] args) {
        long n = 0;
        long sum = 0;//保证数在最大范围内
        for (int i = 0; i < 10; i++) {
            n = n * 10 + 9;
            sum += n;
        }
        System.out.println(sum);
    }
/*请根据给出的正则表达式来验证邮箱格式是否合法，如果用户输入的格式合法则输出「邮箱格式合法」，否则输出「邮箱格式不合法」。
输入描述：任意字符串
输出描述：根据输入的邮箱格式判断其合法于不合法，若输入字符串符合邮箱格式则输出邮箱格式合法，否则输出邮箱格式不合法*/
    public static void main8(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String str = scanner.next();
        String emailMatcher="[a-zA-Z0-9]+@[a-zA-Z0-9]+\\.[a-zA-Z0-9]+";
        if (str.matches(emailMatcher)){//String类 matches() 方法用于检测字符串是否匹配
            System.out.println("邮箱格式合法");
        }else {
            System.out.println("邮箱格式不合法");
        }

    }
/*现有如下成绩等级A,B,C,D。其中A代表优秀，B代表良好，C代表及格，D代表不及格。现在请你来为学生的成绩进行分级，如果用户输入错误则输出未知等级。
输入描述：成绩等级对应的中文表述
输出描述：优秀，良好，及格，不及格，未知等级*/
    public static void main7(String[] args) {
        Scanner sc = new Scanner(System.in);
        String score = sc.next();//next()取得用户输入的字符串,也可以用nextLine（）
        //但nextLine（）以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符。这里面也包括空格。
        switch (score){
            case "A":
                System.out.println("优秀");
                break;
            case "B":
                System.out.println("良好");
                break;
            case "C":
                System.out.println("及格");
                break;
            case "D":
                System.out.println("不及格");
                break;
            default:
                System.out.println("未知等级");
        }

    }
/*体重指数 = 体重 (kg) / ( 身高 (m) × 身高 (m) )，小于18.5属于偏瘦，介于18.5和20.9之间（左闭右开）属于苗条，
介于20.9和24.9之间（左闭右闭）属于适中，超过24.9属于偏胖。下面由你来编写一段逻辑，算出输入了身高和体重的用户的体重指数，
并返回他们的身材状态。(体重指数请使用double类型)
输入描述：用户的身高（m）和用户的体重（kg）
输出描述：体重指数代表的用户身材状态*/
    public static void main6(String[] args) {
        Scanner sc = new Scanner(System.in);
        double m = sc.nextDouble();
        double kg = sc.nextDouble();
        double n = kg / (m * m);
        if(n < 18.5){
            System.out.println("偏瘦");
        } else if (n >= 18.5 && n < 20.9) {
            System.out.println("苗条");
        }else if(n >= 20.9 && n <= 24.9){
            System.out.println("适中");
        }else{
            System.out.println("偏胖");
        }
    }
/*牛牛商场促销活动：满100全额打9折；满500全额打8折；满2000全额打7折；满5000全额打6折；
且商场有抹零活动，不足一元的部分不需要付款（类型强制转换）,牛大姨算不清楚自己应该付多少钱，请你帮忙算一下
输入描述：牛大姨账单钱数（int类型）
输出描述：参加活动后，牛大姨应付钱数(int类型)*/
    public static void main5(String[] args) {
        Scanner sc= new Scanner(System.in);
        double m = sc.nextDouble();
        double n = 0;
        if( m >= 5000){
            n = m * 0.6;
        } else if (m >= 2000 && m < 5000) {
            n = m * 0.7;
        }else if (m >=500 && m < 2000){
            n = m *0.8;
        } else if (m >= 100 && m <500) {
            n = m *0.9;
        }else {
            n = m;
        }
       int num =(int)n;
        System.out.println(num);

    }
/*在不使用第三个变量的情况下交换两个int类型变量的值
输入描述：a变量和b变量的值
输出描述：交换后a变量和b变量的值，中间用空格隔开*/
    public static void main4(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int b = sc.nextInt();
        System.out.println("a ="+ a +" " + "b = "+ b);
        a = a ^ b;
        b = a ^ b;//b=a^b ^ b=a^0=a
        a = b ^ a;//a=a^ a^b=0^b=b
        System.out.println("a ="+ a +" " + "b = "+ b);
    }
/*定义一个int类型变量i,i为由浮点数变量d四舍五入后的整数类型，请将转换后的i进行输出
输入描述：用户随机输入的浮点数
输出描述：四舍五入之后的整数（小数点后一位>=5则进一，否则舍去）*/
    public static void main3(String[] args) {
        Scanner sc = new Scanner(System.in);
        double d = sc.nextDouble();
        int i = (int)d;
        if (d - i >= 0.5 ){
            System.out.println(i+1);
        }else {
            System.out.println(i);
        }
    }
/*输入两个正整数a和b，输出这两个正整数的和，差，积，商，模（若a>b则输出a-b，a/b，a%b的值反之输出b-a，b/a，b%a的值，不考虑小数，请使用int类型）
输入描述：两个正整数
输出描述：它们的和，差，积，商，模。每个值之间用空格隔开*/
    public static void main2(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int b = sc.nextInt();
        if ( a > b){
            System.out.print((a + b) +" "+(a - b) + " " + (a * b)+ " " +(a / b) + " " +(a % b) );
        }else {
            System.out.println((b+a)+" " +(b - a)+" " + (b * a) + " " + (b / a) + " " + (b % a));
        }

    }
/*设计一个方法，将一个小于2147483647的double类型变量以截断取整方式转化为int类型
输入描述：随机double类型变量
输出描述：转化后的int类型变量*/
    public static void main1(String[] args) {
        Scanner sc = new Scanner(System.in);
        double i = sc.nextDouble();
        int n = (int) i;
        System.out.println(n);
    }
}
